Enums no PHP: o que são, quando usar e exemplos práticos

Os Enums chegaram ao PHP 8.1 e trouxeram uma maneira moderna e segura de representar conjuntos fixos de valores. Eles substituem o uso de constantes e strings soltas, tornando o código mais legível, previsível e menos propenso a erros.

Neste artigo, vamos ver:

  • O que são Enums no PHP
  • Quando usar Enums
  • Como criar Enums simples e backed
  • Exemplos práticos no Laravel

O que são Enums no PHP

Enums (ou Enumerações) são estruturas que representam um grupo fixo de valores possíveis para uma variável.

Antes do PHP 8.1, era comum usar classes com constantes, o que facilitava erros de digitação e valores inválidos.

Com Enums, você tem tipagem forte e valores controlados.

Como exemplo, vamos criar um enum para definir o status de um pedido.

enum OrderStatus: string {
    case PENDING = 'pending';
    case PAID = 'paid';
    case CANCELLED = 'cancelled';
}

Agora, é possível usar esse Enum em funções, métodos e propriedades de forma segura:

function processOrder(OrderStatus $status): void {
    if ($status === OrderStatus::PAID) {
        echo "Pedido pago com sucesso!";
    }
}

processOrder(OrderStatus::PENDING);

Enums vs Classes de Constantes

Antes dos Enums, a solução mais comum era criar classes com constantes:

class OrderStatus {
    public const PENDING = 'pending';
    public const PAID = 'paid';
    public const CANCELLED = 'cancelled';
}

O problema é que esse formato não impede o uso de valores inválidos e não tem verificação de tipo.

Com Enums, o PHP garante segurança e clareza, além de melhorar o autocompletar das IDEs.

Enums simples e Enums “Backed

Existem dois tipos de enums no PHP:

  1. Enums simples, ou puras, sem valores associados a cada item
  2. Enums “backed“, ou “apoiadas”, segundo o manual do PHP em Português

Enums backed possuem um valor escalar (string ou int), ideal para salvar em banco de dados.

Veja os exemplos de cada uma delas:

// enum simples
enum UserRole {
    case ADMIN;
    case EDITOR;
    case VIEWER;
}

// enum "backed"
enum PaymentStatus: int {
    case PENDING = 0;
    case PAID = 1;
    case FAILED = 2;
}

Os backed enums são perfeitos para representar status, tipos e categorias que precisam ser persistidos.

Enums com métodos e lógica interna

Enums também podem conter métodos, o que torna o código mais expressivo.

Veja um exemplo com labels amigáveis:

enum OrderStatus: string {
    case PENDING = 'pending';
    case PAID = 'paid';
    case CANCELLED = 'cancelled';

    public function label(): string
    {
        return match($this) {
            self::PENDING => 'Aguardando pagamento',
            self::PAID => 'Pago',
            self::CANCELLED => 'Cancelado',
        };
    }
}

echo OrderStatus::PAID->label(); // Pago

Esse formato é excelente para retornar textos em APIs, views ou painéis administrativos.

Enums convertidas para valores

Como cada Enum pode ter um valor escalar, é fácil converter entre Enum e valor:

// enum para valor escalar
$status = OrderStatus::PAID;
echo $status->value; // 'paid'

// enum a partir de valor escalar
$status = OrderStatus::from('pending');
echo $status->name; // 'PENDING'

Essa conversão é automática e segura, sem necessidade de validações manuais.

Enums no mundo real: aplicação Laravel

Os Enums se integram perfeitamente ao Laravel a partir da versão 9.

Crie o Enum:

// app/Enums/OrderStatus.php
enum OrderStatus: string {
    case PENDING = 'pending';
    case PAID = 'paid';
    case CANCELLED = 'cancelled';
}

E na model, basta adicionar o cast:

use App\Enums\OrderStatus;

protected $casts = [
    'status' => OrderStatus::class,
];

O Laravel fará a conversão automática entre o valor do banco e o Enum.

Resultado: código mais limpo, seguro e fácil de manter.

Enums: Quando usar?

Use Enums sempre que precisar de uma lista fixa de valores.

São ideais para representar:

  • Status de pedidos, pagamentos ou usuários
  • Papéis e níveis de acesso (roles e permissions)
  • Categorias fixas de negócio
  • Tipos de conteúdo ou eventos

Evite usá-los em listas dinâmicas ou dados que mudam com frequência.

Os Enums trazem clareza, segurança e manutenibilidade.

Eles reduzem erros, melhoram o autocompletar e deixam o código mais legível.

Em projetos modernos, especialmente com Laravel, são indispensáveis.

Vantagens dos Enums

  • Código mais legível e sem strings mágicas
  • Redução de erros em tempo de execução
  • Melhor suporte de autocompletar nas IDEs
  • Integração direta com Laravel e Eloquent
  • Facilita manutenção e padronização

Os Enums no PHP representam um avanço importante na linguagem.

Eles aumentam a segurança, a clareza e a qualidade do código — especialmente em projetos modernos com frameworks como Laravel.

Se você ainda usa constantes, considere migrar para Enums.

Eles são mais expressivos, seguros e alinhados com as boas práticas do PHP 8.1+.

The following two tabs change content below.

Roberto Beraldo

Related posts